<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>数字类型(Number type)</title>
  <!-- 
  在JavaScript中， Number 类型是用于表示数字的基本数据类型。以下是对JavaScript中 Number 类型的总结说明：
  一、基本特性
    1. 单一类型：
      - JavaScript中的所有数字都以64位浮点数格式存储，符合IEEE 754标准。这意味着无论是整数还是浮点数，都是以相同的方式处理。

    2. 表示范围：
      - JavaScript的 Number 类型可以表示的范围大约是 -1.7976931348623157e+308 到 1.7976931348623157e+308 。超出这个范围的数字会被表示为 Infinity 或 -Infinity 。

    3. 特殊值：
      -  NaN （Not-a-Number）：表示一个非数字值，通常在数学计算失败时出现，例如 0/0 。
      -  Infinity 和 -Infinity ：分别表示正无穷大和负无穷大。

  二、创建数字
    在JavaScript中，可以通过以下几种方式创建 Number 类型的值：
    1. 字面量： 
      - 直接使用数字字面量，例如： let num = 42; 。

    2. 构造函数：
      - 使用 Number 构造函数创建数字对象，例如： let numObj = new Number(42); 。但是，通常不推荐使用构造函数，因为它会创建一个对象而不是原始值。

    3. 解析字符串：
      - 使用 Number() 、 parseInt() 或 parseFloat() 函数将字符串转换为数字。
      let num1 = Number("42"); // 42
      let num2 = parseInt("42px"); // 42
      let num3 = parseFloat("3.14"); // 3.14

  三、常用方法和属性
    1.  Number.isNaN() ：
      - 检查一个值是否为 NaN ，与全局的 isNaN() 函数不同， Number.isNaN() 只返回 true 当且仅当参数是 NaN 。
      console.log(Number.isNaN(NaN)); // true
      console.log(Number.isNaN("hello")); // false

    2.  Number.isFinite() ：
      - 检查一个值是否是有限的数字。
      console.log(Number.isFinite(42)); // true
      console.log(Number.isFinite(Infinity)); // false

    3.  Number.MAX_VALUE 和 Number.MIN_VALUE ：
      - 分别表示可表示的最大和最小正数。

    4.  Number.parseFloat() 和 Number.parseInt() ：
      - 用于解析字符串并返回相应的数字。

  四、注意事项
    1. 精度问题：
      - 由于浮点数的表示方式，某些数字在计算时可能会出现精度问题。例如， 0.1 + 0.2 的结果并不是 0.3 ，而是 0.30000000000000004 。
      console.log(0.1 + 0.2); // 0.30000000000000004
    2. 类型转换：
      - JavaScript会在需要时自动执行类型转换。例如，在字符串和数字之间进行运算时，可能会发生隐式转换。

  总结
  - JavaScript中的 Number 类型用于表示数字，采用64位浮点数格式。
  - 包含特殊值如 NaN 、 Infinity 和 -Infinity 。
  - 可以通过字面量、构造函数和解析字符串创建数字。
  - 提供了一些方法和属性来处理数字，如 Number.isNaN() 、 Number.isFinite() 等。
  - 需要注意浮点数的精度问题以及类型转换的情况。

  理解 Number 类型的特性和用法有助于在JavaScript中进行有效的数学运算和数据处理。
   -->
</head>
<body>
  
  <script>

    // 1. Number.isNaN() 方法
    console.log("1. Number.isNaN() 方法", Number.isNaN(NaN)); // true
    console.log("1. Number.isNaN() 方法", Number.isNaN("hello")); // false

    // 2. Number.isFinite() 方法
    console.log("2. Number.isFinite() 方法", Number.isFinite(42)); // true
    console.log("2. Number.isFinite() 方法", Number.isFinite(Infinity)); // false

    // 3. Number.MAX_VALUE 和 Number.MIN_VALUE
    console.log("3. Number.MAX_VALUE 和 Number.MIN_VALUE", Number.MAX_VALUE); // 1.7976931348623157e+308
    console.log("3. Number.MAX_VALUE 和 Number.MIN_VALUE", Number.MIN_VALUE); // 5e-324

    // 4. Number.parseFloat() 和 Number.parseInt()
    console.log("4. Number.parseFloat() 和 Number.parseInt()", Number.parseFloat("3.14")); // 3.14
    console.log("4. Number.parseFloat() 和 Number.parseInt()", Number.parseInt("123abc")); // 123

    // 5. Number.isInteger() 方法
    console.log("5. Number.isInteger() 方法", Number.isInteger(42)); // true
    console.log("5. Number.isInteger() 方法", Number.isInteger(42.0)); // true
    console.log("5. Number.isInteger() 方法", Number.isInteger(42.1)); // false

    // 6. Number.prototype.toFixed() 方法
    console.log("6. Number.prototype.toFixed() 方法", (10).toFixed(2)); // "10.00"
    console.log("6. Number.prototype.toFixed() 方法", (10.123456).toFixed(2)); // "10.12"
    console.log("6. Number.prototype.toFixed() 方法", (10.56789).toFixed(2)); // "10.57"

    // 7. Number.prototype.toPrecision() 方法
    console.log("7. Number.prototype.toPrecision() 方法", (10).toPrecision(1)); // "1e+1"
    console.log("7. Number.prototype.toPrecision() 方法", (10).toPrecision(2)); // "10"

    // 8. Number.prototype.toString() 方法
    console.log("8. Number.prototype.toString() 方法", (10).toString()); // "10"
    console.log("8. Number.prototype.toString() 方法", (10.123456).toString()); // "10.123456"

    // 9. Number.prototype.valueOf() 方法
    console.log("9. Number.prototype.valueOf() 方法", (10).valueOf()); // 10
    console.log("9. Number.prototype.valueOf() 方法", (10.123456).valueOf()); // 10.123456

    // 10. Number.prototype.toLocaleString() 方法
    console.log("10. Number.prototype.toLocaleString() 方法", (10).toLocaleString()); // "10"
    console.log("10. Number.prototype.toLocaleString() 方法", (10.123456).toLocaleString()); // "10.123456"
    console.log("10. Number.prototype.toLocaleString() 方法", (10).toLocaleString("en-US")); // "10"
    console.log("10. Number.prototype.toLocaleString() 方法", (10).toLocaleString("zh-CN")); // "10"


  </script>
  
</body>
</html>